import { markRaw, effectScope, ref } from "vue";
import { symbolPinia, setActivePinia } from "./rootStore";

export function createPinia() {
  const scope = effectScope(true);

  const state = scope.run(() => ref({}));
  const _p = [];
  //markRaw 防止pinia被响应式处理
  const pinia = markRaw({
    install(app) {
      setActivePinia(pinia);
      pinia._a = app;
      //   pinia 希望能被共享出去，其他组件可以通过 inject 来获取到 pinia
      app.provide(symbolPinia, pinia);
      // vue2 可以通过 $pinia 来获取到 pinia
      app.config.globalProperties.$pinia = pinia;
    },
    use(plugin) {
      _p.push(plugin);
      return this;
    },
    _p, // 插件数组
    _a: null,
    state, //所有的状态
    _e: scope, //用来管理这个应用的 effectScope
    _s: new Map(), // 存储所有的 store
  });
  return pinia;
}
